import java.util.HashMap;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-08-27
 * Time: 23:10
 */
public class Solution {
    /**
     *  哈希表
     *  使用了 HashMap 的一个性质, map.put(),
     *  key 没有出现过时, 返回 null
     *  key 出现过时, 返回之前的值
     *   都返回 null , 说明都是第一次放这个值, 那么相当于这两个以后就是对应的
     *  返回值不为 null, 且都相同
     *  说明上次 他们出现的位置相同, 也就是上次也是对应者的
     *  如果不相同, 说明上次他们没有对应上
     */
    public boolean wordPattern(String pattern, String str) {
        String[] words = str.split(" ");
        //字符和单词是互相映射，数量必须相等
        if (words.length != pattern.length()) {
            return false;
        }
        Map<Object, Integer> map = new HashMap<>();
        for (Integer i = 0; i < words.length; i++) {
            // map 里面存放的是 字符/字符串 与 其对应的下标
            if (map.put(pattern.charAt(i), i) != map.put(words[i], i)) {
//                 都返回 null , 说明都是第一次放这个值, 那么相当于这两个以后就是对应的
//                 返回值不为 null, 且都相同
//                 说明上次 他们出现的位置相同, 也就是上次也是对应者的
//                 如果不相同, 说明上次他们没有对应上
                return false;
            }
        }
        return true;
    }
}
